<?php
////////////////////////////////////////////////////////////////////////////
//                                                                        //
// NOTICE OF COPYRIGHT                                                    //
//                                                                        //
// Dean`s Office for Moodle                                               //
// Электронный деканат                                                    //
// <http://deansoffice.ru/>                                               //
//                                                                        //
// Copyright (C) 2008-2999  Alex Djachenko (Алексей Дьяченко)             //
// alex-pub@my-site.ru                                                    //
// This program is free software: you can redistribute it and/or modify   //
// it under the terms of the GNU General Public License as published by   //
// the Free Software Foundation, either version 3 of the Licensen.        //
//                                                                        //
// This program is distributed in the hope that it will be useful,        //
// but WITHOUT ANY WARRANTY; without even the implied warranty of         //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          //
// GNU General Public License for more details.                           //
//                                                                        //
// You should have received a copy of the GNU General Public License      //
// along with this program.  If not, see <http://www.gnu.org/licenses/>.  //
//                                                                        //
////////////////////////////////////////////////////////////////////////////
// Здесь происходит объявление класса формы, 
// на основе класса формы из плагина modlib/widgets. 
// Подключается из init.php. 
///////////////////////////////

// Подключаем библиотеки
require_once('lib.php');
// подключаем библиотеку форм
$DOF->modlib('widgets')->webform();

class dof_im_pguestbook_add_form extends dof_modlib_widgets_form
{
    /**
     * @var dof_control
     */
    protected $dof;
    protected $task;
    
    /** Объявление формы
     * 
     * @return null
     */
    function definition ()
    {// делаем глобальные переменные видимыми
        $this->dof = $this->_customdata->dof;    
        // Получаем task
        $this->task = $this->_customdata->task;
		$this->id =$this->_customdata->id;
		$this->postid =$this->_customdata->postid;
        // создаем ссылку на HTML_QuickForm
        $mform =& $this->_form;
        // id 
        $mform->addElement('hidden','id', $this->id);
        $mform->setType('id', PARAM_INT);
        // postid для комментариев
        $mform->addElement('hidden','postid', $this->postid);
        $mform->setType('postid', PARAM_INT);
        // Создаем заголовок формы
        $mform->addElement('header','formtitle',  
                $this->get_formtitle($this->task));
        // Автор
        $mform->addElement('text', 'autor', 
                $this->dof->get_string('autor','pguestbook'), '');
        $mform->setType('autor', PARAM_TEXT);
        // Автозаполнение имени в поле автор
        $username = $this->dof->storage('persons')->get_bu();
        $mform->setDefault('autor', $username->firstname.' '.$username->lastname );
        // Текст
        $mform->addElement('htmleditor', 'text', 
                $this->dof->get_string('formtitle','pguestbook'));
        $mform->setType('text', PARAM_RAW);
        // Кнопоки сохранить и отмена
        $this->add_action_buttons(true, $this->dof->get_string('submit','pguestbook'));
    }
    /** Проверка данных на стороне сервера
     * @return 
     * @param object $data[optional] - массив с данными из формы
     * @param object $files[optional] - массив отправленнных в форму файлов (если они есть)
     */
    function validation($data,$files)
    {
        $error = array();
        if ( ! trim($data['autor']) )
        {// если не указан автор
            $error['autor'] = $this->dof->get_string('required','pguestbook');
        }
        if ( $data['text'] == '' )
        {// если не указан текст сообщения
            $error['text'] = $this->dof->get_string('required','pguestbook');
        }
        return $error;
    }
     /** Возвращает заголовок формы
     * @param string $task - задача
     * @return string - заголовок формы
     */
    function get_formtitle($task)
    {
        $str = $this->dof->get_string('formtitle_addpost','pguestbook');
        switch ($task) 
        {
            case 'addpost' :
            // Заголовок для формы создания сообщения
                $str = $this->dof->get_string('formtitle_addpost','pguestbook');
            break;
            case 'addcomment' :
            // Заголовок для формы создания комментария
                $str = $this->dof->get_string('formtitle_addcomment','pguestbook');
            break;
            case 'editpost' :
            // Заголовок для формы редактирования сообщения
                $str = $this->dof->get_string('formtitle_editpost','pguestbook');
            break;
            case 'editcomment' :
            // Заголовок для формы редактирования комментария
                $str = $this->dof->get_string('formtitle_editcomment','pguestbook');
            break;
        }
        return $str;
    }

    /**
     * Функция обработки данных формы
     * @param array $addvars - массив параметров
     * @return null
     */
    public function process($addvars = array())
    {
        if ( $this->is_cancelled() )
        {//ввод данных отменен - возвращаем на главную
            redirect($this->dof->url_im('pguestbook','/index.php'));
        }
        if ( $this->is_submitted() AND $formdata = $this->get_data() )
        {// Форма подтверждена
            $user = $this->dof->storage('persons')->get_bu();
            if ($formdata->id) 
            { // Перезапись 
                if ( !$formdata->postid ) 
                {//Перезапись сообщения
                    $update = new object;
                    $update->id = $formdata->id;
                    $update->autor = $formdata->autor;
                    $update->text = $formdata->text;
                    if ( ! $this->dof->storage('posts')->update($update) )
                        $this->dof->print_error('error_edit_post', $DOF->url_im(
                                'pguestbook','/index.php'), null, 'im', 'pguestbook');
                    redirect($this->dof->url_im('pguestbook','/index.php',$addvars));
                } else 
                {//Перезапись комментария
                    $update = new object;
                    $update->id = $formdata->id;
                    $update->autor = $formdata->autor;
                    $update->text = $formdata->text;
                    if ( ! $this->dof->storage('comments')->update($update) )
                        $this->dof->print_error('error_edit_comment', 
                            $DOF->url_im('pguestbook','/index.php'), null, 'im', 'pguestbook');
                    redirect($this->dof->url_im('pguestbook','/index.php',$addvars));
                }
            } else 
            { // Cохранение
                if ( !$formdata->postid ) 
                {//Cохранение сообщения
                    $insert = new object;
                    $insert->autor = $formdata->autor;
                    $insert->userid = $user->id;
                    $insert->time = date('U');
                    $insert->text = $formdata->text;
                    if ( ! $this->dof->storage('posts')->insert($insert) )
                        $this->dof->print_error('error_create_post', 
                            $DOF->url_im('pguestbook','/index.php'), null, 'im', 'pguestbook');
                    redirect($this->dof->url_im('pguestbook','/index.php',$addvars));
                } else 
                {//Cохранение комментария
                    $insert = new object;
                    $insert->autor = $formdata->autor;
                    $insert->postid = $formdata->postid;
                    $insert->userid = $user->id;
                    $insert->time = date('U');
                    $insert->text = $formdata->text;
                    if ( ! $this->dof->storage('comments')->insert($insert) )
                        $this->dof->print_error('error_create_comment', 
                            $DOF->url_im('pguestbook','/index.php'), null, 'im', 'pguestbook');
                    redirect($this->dof->url_im('pguestbook','/index.php',$addvars));
                }
            }
        }
    }
}